package com.xuxu.blog.service.loginAndregister;

import com.xuxu.blog.utils.RandomUtil;
import com.xuxu.blog.utils.RedisUtils;
import com.xuxu.blog.utils.TencentUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @className: MessageService
 * @author: Maxuxu
 * @date: 2022/8/22 15:42
 * @description: redis验证短信发送次数
 */
@Service
@Slf4j
public class MessageService {
    @Autowired
    RedisUtils redisUtil;

    /**
     * 发送短信验证码验证发送短信的次数
     * @param phone
     */
    public boolean verifyCount(String phone) throws Exception {
        String countKey = "VerifyCode" + phone +":count";
        String codeKey = "VerifyCode" + phone + ":code";
        Integer count = (Integer) redisUtil.get(countKey);
        // Integer count = redisUtil.getStringtoInteage(countKey);
        // log.error("向手机号：{} 已经发送的次数是：{}",countKey,count);
        if (count == null){
            //    第一次发送,设置发送次数是1
            //    限制30分种内只能发送3次
            // log.error("发送次数：{}",1);
            redisUtil.set(countKey,1,30*60);
        }
        else if (count<=2){
            // log.error("发送次数：{}",count);
            redisUtil.incr(countKey,1);
        }else if(count>2){
            // System.out.println("发送次数超过三次了");
            return false;
        }
        //    发送验证码到redis
        String vscode = String.valueOf(RandomUtil.random6Num());
        log.debug("存入的验证码是：{}",vscode);
        // 验证码5分钟内有效
        redisUtil.set(codeKey,vscode ,5*60);
        //    给用户发送验证码
        //    阿里云发送（只能给指定用户发送）
        //     MessageUtils messageUtils = new MessageUtils();
        //     messageUtils.sendMessage(vscode,phone);
        //    腾讯云发送验证码（任意用户）
        TencentUtils tencentUtils = new TencentUtils();
        tencentUtils.sendMsg(vscode, phone);
        return true;
    }

    /**
     * 验证短信验证码
     * @param phone
     * @param code
     */
    public int verifyCode(String phone,String code) {
        // 从redis中获取验证码
        String codeKey = "VerifyCode" + phone + ":code";
        String redisCode = (String) redisUtil.get(codeKey);
        log.debug("获取到的验证码是：{}，用户传递过来的验证码是：{}", redisCode, code);
        //    判断
        if (redisCode!=null) {
            if (redisCode.equals(code)) {
//                System.out.println("成功");
                redisUtil.del(codeKey);
                return 1;
            } else {
//                System.out.println("失败");
                return 0;
            }
        } else {
//            System.out.println("验证码失效");
            return 2;
        }

    }
}
